/*
 * Copyright (c) 2017-2018 THL A29 Limited, a Tencent company. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.tencentcloudapi.iai.v20180301.models;

import com.tencentcloudapi.common.AbstractModel;
import com.google.gson.annotations.SerializedName;
import com.google.gson.annotations.Expose;

import java.util.HashMap;

public class DetectFaceAttributesRequest extends AbstractModel {

    /**
     * 最多处理的人脸数目。
     * 默认值为1（仅检测图片中面积最大的那张人脸），最大值为120。
     * 此参数用于控制处理待检测图片中的人脸个数，值越小，处理速度越快。
     */
    @SerializedName("MaxFaceNum")
    @Expose
    private Long MaxFaceNum;

    /**
     * 图片 base64 数据，base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     */
    @SerializedName("Image")
    @Expose
    private String Image;

    /**
     * 图片的 Url 。
     * 对应图片 base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * Url、Image必须提供一个，如果都提供，只使用 Url。
     * 图片存储于腾讯云的Url可保障更高下载速度和稳定性，建议图片存储于腾讯云。
     * 非腾讯云存储的Url速度和稳定性可能受一定影响。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     */
    @SerializedName("Url")
    @Expose
    private String Url;

    /**
     * 是否返回年龄、性别、情绪等属性。
     * 合法值为（大小写不敏感）：None、Age、Beauty、Emotion、Eye、Eyebrow
     * Gender、Hair、Hat、Headpose、Mask、Mouth、Moustache、Nose、Shape、Skin、Smile。
     * None为不需要返回。默认为 None。
     * 需要将属性组成一个用逗号分隔的字符串，属性之间的顺序没有要求。
     * 关于各属性的详细描述，参见下文出参。
     * 最多返回面积最大的 5 张人脸属性信息，超过 5 张人脸（第 6 张及以后的人脸）的 AttributesInfo 不具备参考意义。
     */
    @SerializedName("FaceAttributesType")
    @Expose
    private String FaceAttributesType;

    /**
     * 是否开启图片旋转识别支持。0为不开启，1为开启。默认为0。本参数的作用为，当图片中的人脸被旋转且图片没有exif信息时，如果不开启图片旋转识别支持则无法正确检测、识别图片中的人脸。若您确认图片包含exif信息或者您确认输入图中人脸不会出现被旋转情况，请不要开启本参数。开启后，整体耗时将可能增加数百毫秒。
     */
    @SerializedName("NeedRotateDetection")
    @Expose
    private Long NeedRotateDetection;

    /**
     * 人脸识别服务所用的算法模型版本。本接口仅支持“3.0”输入
     */
    @SerializedName("FaceModelVersion")
    @Expose
    private String FaceModelVersion;

    /**
     * Get 最多处理的人脸数目。
     * 默认值为1（仅检测图片中面积最大的那张人脸），最大值为120。
     * 此参数用于控制处理待检测图片中的人脸个数，值越小，处理速度越快。
     *
     * @return MaxFaceNum 最多处理的人脸数目。
     * 默认值为1（仅检测图片中面积最大的那张人脸），最大值为120。
     * 此参数用于控制处理待检测图片中的人脸个数，值越小，处理速度越快。
     */
    public Long getMaxFaceNum() {
        return this.MaxFaceNum;
    }

    /**
     * Set 最多处理的人脸数目。
     * 默认值为1（仅检测图片中面积最大的那张人脸），最大值为120。
     * 此参数用于控制处理待检测图片中的人脸个数，值越小，处理速度越快。
     *
     * @param MaxFaceNum 最多处理的人脸数目。
     *                   默认值为1（仅检测图片中面积最大的那张人脸），最大值为120。
     *                   此参数用于控制处理待检测图片中的人脸个数，值越小，处理速度越快。
     */
    public void setMaxFaceNum(Long MaxFaceNum) {
        this.MaxFaceNum = MaxFaceNum;
    }

    /**
     * Get 图片 base64 数据，base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     *
     * @return Image 图片 base64 数据，base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     */
    public String getImage() {
        return this.Image;
    }

    /**
     * Set 图片 base64 数据，base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     *
     * @param Image 图片 base64 数据，base64 编码后大小不可超过5M。
     *              jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     *              支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     */
    public void setImage(String Image) {
        this.Image = Image;
    }

    /**
     * Get 图片的 Url 。
     * 对应图片 base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * Url、Image必须提供一个，如果都提供，只使用 Url。
     * 图片存储于腾讯云的Url可保障更高下载速度和稳定性，建议图片存储于腾讯云。
     * 非腾讯云存储的Url速度和稳定性可能受一定影响。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     *
     * @return Url 图片的 Url 。
     * 对应图片 base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * Url、Image必须提供一个，如果都提供，只使用 Url。
     * 图片存储于腾讯云的Url可保障更高下载速度和稳定性，建议图片存储于腾讯云。
     * 非腾讯云存储的Url速度和稳定性可能受一定影响。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     */
    public String getUrl() {
        return this.Url;
    }

    /**
     * Set 图片的 Url 。
     * 对应图片 base64 编码后大小不可超过5M。
     * jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     * Url、Image必须提供一个，如果都提供，只使用 Url。
     * 图片存储于腾讯云的Url可保障更高下载速度和稳定性，建议图片存储于腾讯云。
     * 非腾讯云存储的Url速度和稳定性可能受一定影响。
     * 支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     *
     * @param Url 图片的 Url 。
     *            对应图片 base64 编码后大小不可超过5M。
     *            jpg格式长边像素不可超过4000，其他格式图片长边像素不可超2000。
     *            Url、Image必须提供一个，如果都提供，只使用 Url。
     *            图片存储于腾讯云的Url可保障更高下载速度和稳定性，建议图片存储于腾讯云。
     *            非腾讯云存储的Url速度和稳定性可能受一定影响。
     *            支持PNG、JPG、JPEG、BMP，不支持 GIF 图片。
     */
    public void setUrl(String Url) {
        this.Url = Url;
    }

    /**
     * Get 是否返回年龄、性别、情绪等属性。
     * 合法值为（大小写不敏感）：None、Age、Beauty、Emotion、Eye、Eyebrow
     * Gender、Hair、Hat、Headpose、Mask、Mouth、Moustache、Nose、Shape、Skin、Smile。
     * None为不需要返回。默认为 None。
     * 需要将属性组成一个用逗号分隔的字符串，属性之间的顺序没有要求。
     * 关于各属性的详细描述，参见下文出参。
     * 最多返回面积最大的 5 张人脸属性信息，超过 5 张人脸（第 6 张及以后的人脸）的 AttributesInfo 不具备参考意义。
     *
     * @return FaceAttributesType 是否返回年龄、性别、情绪等属性。
     * 合法值为（大小写不敏感）：None、Age、Beauty、Emotion、Eye、Eyebrow
     * Gender、Hair、Hat、Headpose、Mask、Mouth、Moustache、Nose、Shape、Skin、Smile。
     * None为不需要返回。默认为 None。
     * 需要将属性组成一个用逗号分隔的字符串，属性之间的顺序没有要求。
     * 关于各属性的详细描述，参见下文出参。
     * 最多返回面积最大的 5 张人脸属性信息，超过 5 张人脸（第 6 张及以后的人脸）的 AttributesInfo 不具备参考意义。
     */
    public String getFaceAttributesType() {
        return this.FaceAttributesType;
    }

    /**
     * Set 是否返回年龄、性别、情绪等属性。
     * 合法值为（大小写不敏感）：None、Age、Beauty、Emotion、Eye、Eyebrow
     * Gender、Hair、Hat、Headpose、Mask、Mouth、Moustache、Nose、Shape、Skin、Smile。
     * None为不需要返回。默认为 None。
     * 需要将属性组成一个用逗号分隔的字符串，属性之间的顺序没有要求。
     * 关于各属性的详细描述，参见下文出参。
     * 最多返回面积最大的 5 张人脸属性信息，超过 5 张人脸（第 6 张及以后的人脸）的 AttributesInfo 不具备参考意义。
     *
     * @param FaceAttributesType 是否返回年龄、性别、情绪等属性。
     *                           合法值为（大小写不敏感）：None、Age、Beauty、Emotion、Eye、Eyebrow
     *                           Gender、Hair、Hat、Headpose、Mask、Mouth、Moustache、Nose、Shape、Skin、Smile。
     *                           None为不需要返回。默认为 None。
     *                           需要将属性组成一个用逗号分隔的字符串，属性之间的顺序没有要求。
     *                           关于各属性的详细描述，参见下文出参。
     *                           最多返回面积最大的 5 张人脸属性信息，超过 5 张人脸（第 6 张及以后的人脸）的 AttributesInfo 不具备参考意义。
     */
    public void setFaceAttributesType(String FaceAttributesType) {
        this.FaceAttributesType = FaceAttributesType;
    }

    /**
     * Get 是否开启图片旋转识别支持。0为不开启，1为开启。默认为0。本参数的作用为，当图片中的人脸被旋转且图片没有exif信息时，如果不开启图片旋转识别支持则无法正确检测、识别图片中的人脸。若您确认图片包含exif信息或者您确认输入图中人脸不会出现被旋转情况，请不要开启本参数。开启后，整体耗时将可能增加数百毫秒。
     *
     * @return NeedRotateDetection 是否开启图片旋转识别支持。0为不开启，1为开启。默认为0。本参数的作用为，当图片中的人脸被旋转且图片没有exif信息时，如果不开启图片旋转识别支持则无法正确检测、识别图片中的人脸。若您确认图片包含exif信息或者您确认输入图中人脸不会出现被旋转情况，请不要开启本参数。开启后，整体耗时将可能增加数百毫秒。
     */
    public Long getNeedRotateDetection() {
        return this.NeedRotateDetection;
    }

    /**
     * Set 是否开启图片旋转识别支持。0为不开启，1为开启。默认为0。本参数的作用为，当图片中的人脸被旋转且图片没有exif信息时，如果不开启图片旋转识别支持则无法正确检测、识别图片中的人脸。若您确认图片包含exif信息或者您确认输入图中人脸不会出现被旋转情况，请不要开启本参数。开启后，整体耗时将可能增加数百毫秒。
     *
     * @param NeedRotateDetection 是否开启图片旋转识别支持。0为不开启，1为开启。默认为0。本参数的作用为，当图片中的人脸被旋转且图片没有exif信息时，如果不开启图片旋转识别支持则无法正确检测、识别图片中的人脸。若您确认图片包含exif信息或者您确认输入图中人脸不会出现被旋转情况，请不要开启本参数。开启后，整体耗时将可能增加数百毫秒。
     */
    public void setNeedRotateDetection(Long NeedRotateDetection) {
        this.NeedRotateDetection = NeedRotateDetection;
    }

    /**
     * Get 人脸识别服务所用的算法模型版本。本接口仅支持“3.0”输入
     *
     * @return FaceModelVersion 人脸识别服务所用的算法模型版本。本接口仅支持“3.0”输入
     */
    public String getFaceModelVersion() {
        return this.FaceModelVersion;
    }

    /**
     * Set 人脸识别服务所用的算法模型版本。本接口仅支持“3.0”输入
     *
     * @param FaceModelVersion 人脸识别服务所用的算法模型版本。本接口仅支持“3.0”输入
     */
    public void setFaceModelVersion(String FaceModelVersion) {
        this.FaceModelVersion = FaceModelVersion;
    }

    public DetectFaceAttributesRequest() {
    }

    /**
     * NOTE: Any ambiguous key set via .set("AnyKey", "value") will be a shallow copy,
     * and any explicit key, i.e Foo, set via .setFoo("value") will be a deep copy.
     */
    public DetectFaceAttributesRequest(DetectFaceAttributesRequest source) {
        if (source.MaxFaceNum != null) {
            this.MaxFaceNum = new Long(source.MaxFaceNum);
        }
        if (source.Image != null) {
            this.Image = new String(source.Image);
        }
        if (source.Url != null) {
            this.Url = new String(source.Url);
        }
        if (source.FaceAttributesType != null) {
            this.FaceAttributesType = new String(source.FaceAttributesType);
        }
        if (source.NeedRotateDetection != null) {
            this.NeedRotateDetection = new Long(source.NeedRotateDetection);
        }
        if (source.FaceModelVersion != null) {
            this.FaceModelVersion = new String(source.FaceModelVersion);
        }
    }


    /**
     * Internal implementation, normal users should not use it.
     */
    public void toMap(HashMap<String, String> map, String prefix) {
        this.setParamSimple(map, prefix + "MaxFaceNum", this.MaxFaceNum);
        this.setParamSimple(map, prefix + "Image", this.Image);
        this.setParamSimple(map, prefix + "Url", this.Url);
        this.setParamSimple(map, prefix + "FaceAttributesType", this.FaceAttributesType);
        this.setParamSimple(map, prefix + "NeedRotateDetection", this.NeedRotateDetection);
        this.setParamSimple(map, prefix + "FaceModelVersion", this.FaceModelVersion);

    }
}

